package com.tdam2013.grupo08.activities;

import java.util.ArrayList;
import java.util.Date;

import com.tdam2013.grupo08.R;
import com.tdam2013.grupo08.data.DataBaseHelper;
import com.tdam2013.grupo08.helpers.ContactoHelper;
import com.tdam2013.grupo08.models.MensajeWeb;
import com.tdam2013.grupo08.network.ConnectivityReceiver;
import com.tdam2013.grupo08.network.MessageSenderService;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class MensajesWebActivity extends ListActivity implements OnItemClickListener {

		ConnectivityReceiver connReceiver;
		MensajesAdapter adapter;
		DataBaseHelper dbHelper;
		RecibirMensajesAsyncTask recibirMensajesTask;
		
		@Override
		protected void onCreate(Bundle savedInstanceState) {
			
			super.onCreate(savedInstanceState);
			setContentView(R.layout.activity_mensajes);
			
			adapter = new MensajesAdapter();
			setListAdapter(adapter);
			getListView().setOnItemClickListener(this);
			
			
			//connReceiver = new ConnectivityReceiver(getApplicationContext());
		}
		
		@Override
		public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

			MensajeWeb ultimoMensaje = (MensajeWeb) adapter.getItem(position);
			Intent intent = new Intent(this, ContactoMensajesActivity.class);
			intent.putExtra("id", ultimoMensaje.getContacto().getId());
			startActivity(intent);
			
		}
		
		private void cargarMensajes()
		{
			SharedPreferences myPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    		String userName = myPreferences.getString("userName", "");
			
			dbHelper = new DataBaseHelper(getApplicationContext());
			ArrayList<MensajeWeb> mensajes = dbHelper.obtenerUltimoMensajeDeContactos(userName);
			
			adapter.clear();
			
			for (MensajeWeb mensajeWeb : mensajes) {
				
				//obtengo el contacto y lo agrego al mensaje
				mensajeWeb.setContacto(ContactoHelper.loadContacto(
						getContentResolver(), 
						mensajeWeb.getContactoId(), 
						getApplicationContext()));
				
				adapter.addMensaje(mensajeWeb);
				
			}
			
			adapter.notifyDataSetChanged();
		}
		
		public void btnNuevoMensaje_Click(View view)
		{
			Intent intent = new Intent(getApplicationContext(), NuevoMensajeActivity.class);
			startActivityForResult(intent, 1);
		}
		
		public void btnUpdateMsjs_Click(View view)
		{
			SharedPreferences myPreferences = PreferenceManager.getDefaultSharedPreferences(this);
			
			String userName = myPreferences.getString("userName", "");
			String pass = myPreferences.getString("userPass", "");
			
			//recibo mensajes
			recibirMensajesTask = new RecibirMensajesAsyncTask();
			recibirMensajesTask.execute(userName, pass);
		}
		
		
		class MensajesAdapter extends BaseAdapter {
			private ArrayList<MensajeWeb> mensajesLista;
			private LayoutInflater inflater;

			public MensajesAdapter() {
				mensajesLista = new ArrayList<MensajeWeb>();
				inflater = LayoutInflater.from(MensajesWebActivity.this);
			}

			public void addMensaje(MensajeWeb m) {
				if (m != null) {
					mensajesLista.add(m);
				}
			}

			public void clear() {
				mensajesLista.clear();
			}
			
			@Override
			public int getCount() {
				return mensajesLista.size();
			}

			@Override
			public Object getItem(int position) {
				return mensajesLista.get(position);
			}

			@Override
			public long getItemId(int position) {
				return position;
			}

			class Holder {
				private ImageView imagenContacto;
				private TextView txtNombreContacto;
				private TextView txtMensaje;
			}

			@Override
			public View getView(int position, View convertView, ViewGroup arg2) {
				
				Holder holder;
				
				//obtengo el mensaje actual
				MensajeWeb mensajeActual = (MensajeWeb) getItem(position);
				
				if(convertView == null) {
					
					convertView = inflater.inflate(R.layout.item_mensaje, null);
					holder = new Holder();
					holder.imagenContacto = (ImageView) convertView.findViewById(R.id.imagenContacto);
					holder.txtMensaje = (TextView) convertView.findViewById(R.id.ultimoMensaje);
					holder.txtNombreContacto = (TextView) convertView.findViewById(R.id.nombreContacto);
					convertView.setTag(holder);
					
				}else{
					holder = (Holder) convertView.getTag();
				}
				
				holder.txtMensaje.setText(ellipsize(mensajeActual.getMensaje(), 40));
				holder.txtNombreContacto.setText(mensajeActual.getContacto().getNombre() + 
						" (" + mensajeActual.getContacto().getNombreUsuarioWeb() + ")" );
				
				holder.imagenContacto.setImageURI(mensajeActual.getContacto().getImagen());
				if(holder.imagenContacto.getDrawable() == null){
					holder.imagenContacto.setImageResource(R.drawable.no_photo);
				}
			
				return convertView;
			}
		}
		
		@Override
		protected void onActivityResult(int requestCode, int resultCode, Intent data) {
			
			//cuando vuelvo de la activity de nuevo mensaje..recargo la lista
			if (requestCode == 1) {
			     if(resultCode == RESULT_OK){     
			    	 cargarMensajes();
			     }
			  }
		}
		
		
		@Override
		public void onResume(){
			super.onResume();
			
			cargarMensajes();
		}
		
		private static String ellipsize(String input, int maxCharacters) {
		  
		  if (input == null || input.length() < maxCharacters) {
		    return input;
		  }
		  return input.substring(0, maxCharacters) + "..." ;
		}

		protected class RecibirMensajesAsyncTask extends AsyncTask<String, Integer, Boolean>
	    {
			ProgressDialog pDialog;
			String nombreUsuario;
	    	String passUsuario;
	    	
	    	@Override
	        protected void onPreExecute(){
	    		pDialog = new ProgressDialog(MensajesWebActivity.this);
	            pDialog.setMessage(getString(R.string.verificandoMsjs));
	            pDialog.show();
	        }
	    	
	    	@Override
			protected Boolean doInBackground(String... params) 
			{
	    		
	    		nombreUsuario = params[0];
	    		passUsuario = params[1];
	    		
	    		
				boolean result = MessageSenderService.hayNuevosMensajes(new Date(), nombreUsuario, passUsuario, getApplicationContext());
				
				if(!result)
				{
				}
				
				return result;
			}
	    	
	    	@Override
	        protected void onPostExecute(Boolean result)
	        {
	            super.onPostExecute(result);
	            
	            cargarMensajes();
	            
	            pDialog.dismiss();
	        };
	    }
}
